🤖 Ruta del Proyecto

Robot que Consulta Plataformas de Alquiler Corto Plazo

Análisis técnico, legal y de arquitectura para construir un agente IA que consulte plataformas estilo Airbnb. Basado en investigación de fuentes reales (2025–2026).

📑 Índice

1. Definición del objetivo

Antes de codear, hay que fijar para quién es el robot. Esto redefine todo el diseño:

PerfilEnfoca enEjemplo de consulta
🧳 HuéspedBúsqueda conversacional + recomendación"Apartamento 2 hab cerca del Parque Güell, bajo €100/noche"
💰 Inversor STRVolúmenes + datos históricos + métricas"ADR y ocupación promedio en barrios de Miami"
📊 Monitor de preciosScraping recurrente + alertas"Avísame si baja el precio de este depto"
🏨 HostAnálisis competitivo de su zona"¿Cómo cobran mis competidores en Barcelona?"
⚡ Dato duro: Airbnb no tiene API pública para datos de mercado. Solo existe una API de "partner" para administradores que gestionan su propio inventario. Para research de competencia, vas a tener que consultar la web (scraping) o usar APIs de terceros.

3. Qué dice robots.txt de Airbnb

Airbnb pide a los bots que no accedan a estas secciones (y su propia API prohíbe explícitamente "disallowed crawling"):

Patrón bloqueadoQué es
/s/*/*Resultados de búsqueda (el grueso de lo que se quiere)
/rooms/*/amenitiesPáginas de detalle de anuncio
/rooms/*/photosFotos de anuncio
/rooms/*/reviewsReseñas
/calendar/Calendarios de disponibilidad (excepto iCal oficial)
/users/*/profilePerfiles de usuarios
👉 O sea: las secciones más valiosas están marcadas como "no crawling". Esto confirma que scraping directo va contra las reglas declaradas del sitio.

4. Arquitectura del robot

La ruta moderna es un agente IA con MCP (Model Context Protocol). Así quedó el diseño que ya está funcionando en 2025–2026:

🧑‍💼 Usuario
(natural language)
➜
🧠 LLM
GPT-4o / Claude
➜
🔌 MCP Server
search_airbnb
➜
📊 Respuesta
ranking + recomendación

Tres componentes clave:

ComponenteFunción
NLU (Natural Language Understanding)Convierte "quiero algo cozy cerca del Güell" en parámetros: ubicación, ~2 hab, presupuesto, amenidades
MCP ToolsConexión real con la data de Airbnb (búsqueda, detalle, comparar precios)
Memoria conversacionalRecuerda preferencias entre búsquedas y personaliza resultados
Diagrama de flujo del buscador conversacional:
Usuario → ConversationService (extrae parámetros con LLM) → SearchService (consulta Elasticsearch/Api) → Ranking por relevancia + geo-radius → Resultados como tarjetas swipeables.

5. Cómo consultar Airbnb (4 opciones)

OpciónCómo funcionaEsfuerzoMejor para
A. MCP Server listo RECOMENDADO Usás un servidor MCP que ya habla con Airbnb. Ej: makework36/airbnb-mcp-server (Apify). Sin login ni API key. Bajo Arrancar en días, prototipos
B. Apify Actor Actores preconstruidos que manejan anti-bot por vos. Devuelve JSON/CSV/Excel. Bajo Automatización recurrente sin código
C. API scraping + proxies Bright Data (~98% éxito), Scrapfly (~99%), Oxylabs. Vos parseás el HTML renderizado. Medio Volúmenes, datos geo-específicos
D. DIY Playwright Navegador headless + interceptar API GraphQL interna StaysSearch. Máximo control. Alto Control total, one-off, learning
💡 Recomendación de arranque: Empezá con la Opción A o B para validar la idea en días. Escalá a C/D recién si necesitás volúmenes, datos históricos o control total sobre el esquema.

6. Desafíos técnicos de Airbnb

Airbnb está clasificado como dificultad 4/5 para scraping. Planificá para:

DesafíoDetalleContramedida
Anti-bot agresivoWAF propio + Akamai, fingerprinting TLS, detección de navegadorProxies residenciales (no datacenter)
Precios dependientes de fechaEl precio no existe sin checkin + checkoutCada combinación de fechas = una consulta
Selectores inestablesLas clases CSS cambian en cada despliegueUsar [data-testid] o API GraphQL
Límite 270 resultadosAirbnb solo muestra ~270 listings por búsquedaDividir ciudad en barrios/códigos postales
Rate limits~100 peticiones/hora por IPDelay 3–10s, backoff exponencial

7. Datos extraíbles (campo por campo)

Campo¿Extraíble?Notas
Título, tipo de propiedad✅Básico y estable
Precio nocturno + fees✅Capturar desglose completo
Rating y nº de reviews✅Agregados, preferible a texto individual
Amenidades, reglas, políticas✅En página de detalle
Calendario de disponibilidad⚠️Difícil, requiere subpáginas
Coordenadas⚠️Son aproximadas (Airbnb las ofusca)
Nombre de host✅*Dato personal — con cuidado
Dirección exacta / email❌No extraíble ni deberías
🪤 Trampa #1 — El precio NO es lo que paga el huésped: un depto a $70/noche con fee de limpieza $90 cuesta $160 la primera noche pero ~$115/noche en 4 noches. Siempre capturá el desglose.
🪤 Trampa #2 — Las coordenadas son vecinales, no de calle. Bien para análisis de barrio, mal para decir "es la dirección X". Airbnb lo hace a propósito para proteger privacidad.

8. Stack técnico y código de arranque

🛠️ Tecnologías recomendadas

Python 3.10+
FastAPI (backend)
Next.js / React (frontend)
Elasticsearch (búsqueda híbrida)
Supabase (base de datos)
Claude / GPT-4o (LLM)
MCP (Model Context Protocol)
Playwright (si vas DIY)

🔌 Opción A: Conectar un MCP Server (más rápido)

__dirname = "~/.claude/mcp.json" (macOS) o %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "airbnb": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-streamable-http",
        "https://airbnb-mcp-server.apify.actor/mcp?token=TU_APIFY_TOKEN"
      ]
    }
  }
}

🔧 Opción D: Scraper DIY con Playwright (ejemplo)

pip install playwright playwright-stealth
playwright install chromium

import asyncio
from playwright.async_api import async_playwright

async def scrape_airbnb(url):
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=True,
            args=["--disable-blink-features=AutomationControlled"]
        )
        context = await browser.new_context(proxy="http://tu_proxy_residencial:puerto")
        page = await context.new_page()
        await page.goto(url, wait_until="networkidle")
        # Preferí interceptar la API GraphQL interna (StaysSearch) sobre el DOM
        listings = await page.query_selector_all("[data-testid='card-container']")
        await browser.close()
        return listings
💾 Exportar a JSON/CSV: pip install apify-client para la Opción B, o Pandas/SQLite para almacenamiento local.

9. Roadmap de ejecución (6 semanas)

Semana 1

Definir objetivo

¿Huésped / inversor / monitor? Marco legal básico.

Semana 2

Conectar datos

MCP Server o Apify → tener datos reales de Airbnb.

Semana 3

NLU + parámetros

LLM extrae ubicación, fechas, huéspedes, presupuesto.

Semana 4

Memoria + ranking

Recuerda preferencias entre búsquedas.

Semana 5

Interfaz o integración

Web/swipe, o entrega por email/Notion.

Semana 6

Pruebas y monitoreo

Rate limiting, caching, detección de roturas.

10. Recomendación final

🎯 La ruta óptima según tu caso:

Si querés...Haz esto
Validar la idea rápidoUsá el MCP Server de Apify (makework36/airbnb-mcp-server). Sin código, sin login, ~$0.02/llamada.
Automatizar sin programarApify Actor + exportación CSV/Excel.
Tener volúmenes o datos geoBright Data / Scrapfly + proxies residenciales.
Máximo control / learningPlaywright + interceptar API GraphQL.
Datos históricos y confiablesDatos públicos (Inside Airbnb) o proveedores licenciados (AirDNA).
✅ Resumen de la ruta en 6 pasos:
1. Definí el objetivo · 2. Revisá el marco legal · 3. Armar arquitectura de agente · 4. Elegí cómo consultar Airbnb · 5. Preparate para el anti-bot · 6. Extraé los campos correctos.
⚖️ Descargo: Este análisis es informativo y no es asesoramiento legal. La legalidad del scraping depende de jurisdicción, tipo de dato y uso. Airbnb prohíbe explícitamente el scraping en sus ToS. Para uso comercial o redistribución de datos, consulta a un abogado y respetá siempre robots.txt, las políticas de la plataforma y la privacidad de las personas (GDPR/CCPA).